package com.mililoan.service.module.system;

import java.util.ArrayList;
import java.util.HashSet;

import com.mililoan.common.bean.PageResultSet;
import com.mililoan.model.system.User;
/**
 * 用户控制类接口
 * @author mwei
 *
 */
public interface UserBo {
	/**
	 * 查询用户
	 * @param user,page,pageSize
	 * @return 用户ID
	 * @author mwei
	 */
	 PageResultSet<User> query(User user,int page,int pageSize);
	/**
	 * 查询所有用户
	 * @param user,page,pageSize
	 * @return 用户ID
	 * @author mwei
	 */
	 ArrayList<User> queryAll(User user);
	/**
	 * 添加用户
	 * @param user
	 * @return 用户ID
	 * @author mwei
	 */
	 Long addUser(User user) throws Exception;
	/**
	 * 修改用户
	 * @param user
	 * @return 用户ID
	 * @author mwei
	 */
	 Long updateUser(User user) throws Exception;
	/**
	 * 修改用户的角色和功能
	 * @param user
	 * @return boolean
	 * @author mwei
	 */
	 boolean updateActor(User user) throws Exception;

	/**
	 * 验证互斥权限（按模块）
	 * @param actorsList
	 * @param funsList
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	 boolean checkFuns(ArrayList actorsList,ArrayList funsList);
	/**
	 * 修改密码
	 * @param userId,password
	 * @return 用户ID
	 * @author mwei
	 */
	Long updatePassword(Long userId,String password);
	/**
	 * 删除用户
	 * @param userId
	 * @return 用户ID
	 * @author mwei
	 */
	Long delUser(Long userId);
	/**
	 * 根据用户名和密码获得用户信息
	 * @param accounts
	 * @param password
	 * @return user 如果没有记录返回NULL
	 * @author mwei
	 */
	 User getUser(String accounts, String password);

	/**
	 * 根据用户名ID得用户信息
	 * @param id
	 * @return user 如果没有记录返回NULL
	 * @author mwei
	 */
	 User getUserById(Long id);
	/**
	 * 根据用户名帐号得用户信息
	 * @param accounts
	 * @return user 如果没有记录返回NULL
	 * @author mwei
	 */
	 User getUser(String accounts);
	/**
	 * 根据用户名ID得带权限的用户信息
	 * @param id
	 * @return user 如果没有记录返回NULL
	 * @author mwei
	 */
	 User getUserWithActor(Long id);
	/**
	 * 根据用户权限
	 * @param user
	 * @return HashSet<Long> 
	 * @author mwei
	 */
	 HashSet<Integer> getUserActor(User user);
	
	 ArrayList<User> queryAllExc(User user);

}
